package opf5.entities.ordenadoresJugadores;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import opf5.entities.dominio.Jugador;

public class OrdenamientoJugadoresMix implements OrdenadorJugadores, Comparator<Jugador>{
	private List<Criterio> criterios;

	public OrdenamientoJugadoresMix(List<Criterio> criterios) {
		this.criterios = criterios;
	}
	
	@Override
	public List<Jugador> ordenarJugadores(List<Jugador> jugadores) {
		List<Jugador> jugadoresOrdenados = new ArrayList<Jugador>(jugadores);
		Collections.sort(jugadoresOrdenados, this);
		Collections.reverse(jugadoresOrdenados);
		return jugadoresOrdenados;
	}

	@Override
	public int compare(Jugador jugador1, Jugador jugador2) {
		double mix1 = this.calcularMix(jugador1);
		double mix2 = this.calcularMix(jugador2);
		
		if (mix1 < mix2) {
			return -1;
		} else if (mix1 > mix2) {
			return 1;
		}
		
		return 0;
	}

	private double calcularMix(Jugador jugador) {
		double sumatoria = 0;
		for (Criterio c : criterios) {
			sumatoria += c.calcular(jugador);
		}
		return sumatoria / criterios.size();
	}

}
